草庐IT

c++ - Lua C++ 表迭代

全部标签

hadoop - 为什么 Hadoop MapReduce 对于迭代算法每次迭代都要进行磁盘读写?

我知道对于迭代算法,Hadoopmapreduce表现不佳,因为它为每次迭代执行完整的磁盘读/写。但是为什么呢?是为了系统的健壮性吗? 最佳答案 你的问题有点宽泛,但我还是会尽力回答。Hadoop做任何算法的磁盘读/写操作都是因为Hadoop做的是面向磁盘的处理,它就是建立在这个原理上的。这也是开发spark的原因之一,将计算从磁盘转移到内存,以便它可以减少面向磁盘的计算的延迟开销。现在,对于每次MapReduce迭代,这种从/到磁盘的读/写操作有助于系统的健壮性和可靠性。考虑一个最简单的例子,一个工作节点有2个容器,这意味着两个独

scala - 如何使用循环在 Spark-Scala 的 HDFS 中迭代多个文本文件?

我在集群中工作。我需要为HDFS中包含的每个文本文件运行相同的spark操作。但是我想在不从shell命令行为每个文件提交sparkjobshell-command的情况下这样做,因为文件数是90。我该怎么做?我的一个文件的代码结构如下:objectSparkGraphGen{defmain(args:Array[String]){valconf=newSparkConf().setMaster("yarn").setAppName("dataset")valsc=newSparkContext(conf)valsqlContext=neworg.apache.spark.sql.SQ

java - 可迭代到 ArrayList 元素更改

所以我正在实现mapreduce作业,这意味着我正在处理键值对。我有变量IterablevaluesFreqDataWritable是一个包含信息片段的对象,但现在我只关心它包含的一条信息,即getFilename()访问的字符串。我有以下循环:ArrayListfilenames=newArrayList();for(FreqDataWritablei:values){filenames.add(i.getFilename());}现在我要做的就是打印数组列表文件名中的值。for(inti=0;i但是,当我这样做时,文件名中的所有内容都是相同的。唯一打印出来的是多次打印的单个文件名。

java - MapWritable 的 MapWritable 上的迭代器

我有Java(带有map-reducehadoop库):MapWritablemw;我需要在mw的所有MapWritable值上获取迭代器,但是如何?我会写:Iteratorit=((MapWritable)mw.values()).what?我无法替换“什么?”带迭代器。如果我写:mw.values().iterator();我有Iterator而不是MapWritable。 最佳答案 mw.values()返回Collection,如果你需要迭代mw的值,你可以像你说的那样做mw.values().iterator().如果您需

scala - 引发多次迭代内存不足

我有一个spark作业(在spark1.3.1中运行)必须迭代几个键(大约42个)并处理该作业。这是程序的结构从map中获取key从与key匹配的配置单元(下面的hadoop-yarn)中获取数据作为数据框处理数据将结果写入配置单元当我为一个键运行它时,一切正常。当我使用42个键运行时,我在第12次迭代时遇到内存不足异常。有没有办法在每次迭代之间清理内存?帮助表示赞赏。这是我正在使用的高级代码。publicabstractclassSparkRunnable{publicstaticSparkContextsc=null;publicstaticJavaSparkContextjsc=

loops - 迭代映射和减少操作

我正在编写一个Hadoop应用程序以特定分辨率计算map数据。我的输入文件是map的图block,根据QuadTile命名。原则。我需要对它们进行子采样,并将它们拼接在一起,直到我有一个覆盖更大区域但分辨率较低的某个更高级别的图block。就像在谷歌地图中缩小一样。目前,我的Mapper对图block进行子采样,而我的reducer将图block组合到一定级别并形成更高一层的图block。所以这么好。但是根据我需要的图block,我需要重复这些map并减少x次步骤,这是我目前无法做到的。这样做的最佳方式是什么?是否可以不明确地将图block保存在某个临时目录中并在这些临时目录上启动新的

python - 基于mapreduce和hadoop的迭代kmeans

我已经为Hadoop编写了一个简单的k-means集群代码(两个独立的程序-mapper和reducer)。该代码正在我本地盒子上的一个小型二维点数据集上工作。它是用Python编写的,我打算使用StreamingAPI。每次运行mapper和reducer后,都会生成新的中心。这些中心是下一次迭代的输入。根据建议,我使用了mrjob,jobpython,适合多步,defsteps(self):return[self.mr(mapper=self.anything,combiner=self.anything,reducer=self.anything)]这只是一次迭代,请告诉我在生成

hadoop - 在 Reduce 阶段 (HADOOP) 多次迭代键/值?

如何对在HADOOP的Reduce阶段收到的键/值对进行多次迭代。我想做类似的事情,但它没有进入第2次迭代。for(Vectorvalue:values){sum+=value.getVector()[length-1];for(inti=1;i请给我解决方案???谢谢:) 最佳答案 您正在遍历values中的结果,一旦您遍历了它们,您就不能再这样做了。如果values中的总数不太大,您可以尝试将值设置为本地集合变量,然后您应该能够多次迭代它们。试试这个:Java:useEnumerationmultipletimes

java - 在 arraylist 中缓存可迭代以在 reducer 中迭代两次不起作用

我的MR程序有一些奇怪的问题,不知道为什么它会这样工作。也许可以给我提示它有什么问题?这就是我的Mapper函数的样子:IntegerClick_ID=0;publicvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedException{Stringline=value.toString();String[]lineArr=line.split("\t");Stringnm_uv_id=lineArr[0];Stringsession_id=lineArr[1];Stringtim

hadoop - 为什么此代码不对 reducer 值进行两次迭代?

我有这个代码:publicvoidreduce(Textkey,Iterablevalues,Contextcontext)throwsIOException,InterruptedException{Stringname=null;Stringsid=null;Stringpredicate=null;Stringoid=null;Stringid=null;StringoutKey=null;StringoutVal=null;LinkedListvaluesList=newLinkedList();Iteratorite=values.iterator();while(ite.h